import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class project {
    public int longestSubsequence(int[] arr, int difference) {
        Map<Integer,Integer> map=new HashMap<>();
        int ret=0;
        for(int i=0;i<arr.length;i++) {
            map.put(arr[i],map.getOrDefault(arr[i]-difference,0)+1);
            ret=Math.max(ret,map.get(arr[i]));
        }
        return ret;
    }

















    class FindSumPairs {
        Map<Integer,Integer> map1;
        Map<Integer,Integer> map2;
        int[] nums2;
        public FindSumPairs(int[] nums1, int[] nums2) {
            map1=new HashMap<>();
            map2=new HashMap<>();
            this.nums2=nums2;
            for(int num:nums1) {
                map1.put(num, map1.getOrDefault(num, 0) + 1);
            }
            for(int num:nums2){
                map2.put(num,map2.getOrDefault(num,0)+1);
            }
        }

        public void add(int index, int val) {
            map2.put(nums2[index],map2.get(nums2[index])-1);
            map2.put(nums2[index]+val,map2.getOrDefault(nums2[index]+val,0)+1);
            this.nums2[index]=this.nums2[index]+val;
        }

        public int count(int tot) {
            int ret=0;
            for(int key:map1.keySet()){
                if(map2.containsKey(tot-key)){
                    ret+=map1.get(key)*map2.get(tot-key);
                }
            }
            return ret;
        }
    }
















    public int tupleSameProduct(int[] nums) {
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length-1;i++){
            for(int j=i+1;j<nums.length;j++){
                int sum=nums[i]*nums[j];
                map.put(sum,map.getOrDefault(sum,0)+1);
            }
        }
        int ret=0;
        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            if(entry.getValue()>=2){
                ret+=((entry.getValue()*(entry.getValue()-1))/2)*8;
            }
        }
        return ret;
    }



















    public static void main(String[] args) {
        String s="aabca";
        int ret=countPalindromicSubsequence(s);
        System.out.println(ret);
    }
    public static int countPalindromicSubsequence(String s) {
        Set<Character> set=new HashSet<>();
        Map<Character,Integer> map=new HashMap<>();
        for(int i=0;i<s.length();i++){
            char ch=s.charAt(i);
            map.put(ch,i);
        }
        int ret=0;
        for(int i=0;i<s.length()-2;i++){
            if(set.contains(s.charAt(i))){
                continue;
            }
            Set<Character> size=new HashSet<>();
            int end=map.get(s.charAt(i));
            int index=i+1;
            while (index<end){
                size.add(s.charAt(index));
                index++;
            }
            ret+=size.size();
            set.add(s.charAt(i));
        }
        return ret;
    }




















    public int maximumUniqueSubarray(int[] nums) {
        int max=0;
        Set<Integer> set=new HashSet<>();
        int sum=0;
        int start=0;
        for(int i=0;i<nums.length;i++){
            while (!set.isEmpty()&&set.contains(nums[i])){
                sum-=nums[start];
                set.remove(nums[start]);
                start++;
            }
            set.add(nums[i]);
            sum+=nums[i];
            max=Math.max(max,sum);
        }
        return max;
    }
}
